home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1991-07-25 | 38.3 KB | 1,543 lines
;PCContact\Windows ;Release .96 ;a Windows front end for PCContact ;by Paul Bonner ; ;Enhancements ; ;DONE ;beef up support for iconized operation DONE ;replace xmodem mail upload with standard ascii transfer DONE ;add "print" option to mail & message listboxes DONE ;shorten mail from field to 25 characters--replies go to # anyway DONE ;rearrange fields on message display--cut subject down to 25 chars DONE ;strip off "Reply to:" from mail subject's--substitute re: DONE ;fix new FILE scan--add date function--scan new doesn't work DONE ;fix tendency to forget account number and password DONE ;fix script's murderous behavior toward binary messages DONE ;PLANNED ;add batch delete capability to mail & library screens ;add ability to send/receive binary files as mail messages ;add an address book ;add read/unread indicator to messages ;activate read/unread for mail ;break outgoing messages into 35 line chunks ;invert messages & mail tables before sending so they go out in right order ; ;here we initialize variables ; $memdir=system(0x0F01,"Memo") $datadir=system(0x0F01,"data") $setdir=system(0x0F01,"settings") set directory settings $setdir menu menu end screen hide fkeys hide load "PCC1.DCS" set termtitle "PC/C On-Line" set binarytransfers xmodem table define 11 TEXT "account.inf" record read 11 set $name @r11 record read 11 set $pass @r11 record read 11 set $phone @r11 record read 11 set %mail num(@r11) record read 11 set %files num(@r11) record read 11 set %messages num(@r11) record read 11 set %send num(@r11) record read 11 set %upload num(@r11) record read 11 set $downdir @r11 record read 11 set %sec0 num(@r11) record read 11 set %sec1 num(@r11) record read 11 set %sec2 num(@r11) record read 11 set %sec3 num(@r11) record read 11 set %sec4 num(@r11) record read 11 set %sec5 num(@r11) record read 11 set %sec6 num(@r11) record read 11 set %sec7 num(@r11) record read 11 set %sec8 num(@r11) record read 11 set %lib0 num(@r11) record read 11 set %lib1 num(@r11) record read 11 set %lib2 num(@r11) record read 11 set %lib3 num(@r11) record read 11 set %lib4 num(@r11) record read 11 set %oldlist num(@r11) table close 11 table clear 11 ; ;next comes the opening dialog box ; *opener dialog (,,267,181) picture (76,3,,) "cbar1.bmp" set directory data $datadir groupbox (6,32,230,46) 'On-line' button (14,43,40,14) default 'AutoServe' perform script, resume message (60,46,166,11) 'Automated processing of messages and files.' button (14,59,40,14) 'Terminal' dialog cancel, perform interactive, resume message (60,62,160,10) 'Standard Compuserve terminal session.' groupbox (6,85,230,79) 'Off-Line' button (14,96,40,14) 'Setup' perform setup, resume message (60,99,150,10) 'Specify account and communication settings.' button (14,112,40,14) 'Library' perform library, resume message (60,115,147,9) 'Check out PC Contact file library listings.' button (14,128,40,14) 'Mail' perform mail, resume message (60,131,139,10) 'Read or compose personal mail.' button (14,144,40,14) 'Forum' set %i 0, perform forum, resume message (60,147,164,13) 'Read or compose public messages.' iconbutton (238,112,,) Note "About" perform about, resume iconbutton (238,152,,) STOP "Quit" set termtitle "Dynacomm", cancel dialog end wait resume goto opener ; ;next is the logon routine for the standard terminal session ; *interactive title "CompuServe" menu cancel screen show fkeys show dial $phone if error() screen hide, fkeys hide, return *logloop send nocr "^c" when string 1 "ID" when cancel timer, resume when timer "2" goto logloop wait resume when cancel string send $name wait string "ord" wait quiet "1" perform decode send $pass perform encode cancel ; ;next is the autoserve logon and session sequence ; *AutoServe dialog cancel title "PCContact\Windows" screen show dial $phone if error() screen hide, fkeys hide, return dialog (,8,150,47) 'AutoServe' set %screen 0 message (2,7,172,10) "Connecting to Compuserve" button (47,25,48,12) '&Hide Session' increment %screen, if %screen > 1 set %screen 0, screen show, dialog update button (1) "Hide Session", else screen hide, dialog update button(1) "Show session" button (6,25,35,12) '&Minimize' window minimize button (101,25,35,12) '&Quit' goto logoff dialog end *ll2 send nocr "^c" when string 1 "ID" when cancel timer, resume when timer "2" goto ll2 wait resume when cancel string send $name wait string "ord" wait quiet "1" perform decode send $pass perform encode set %newmail 0 when string "waiting." set %newmail 1 wait string "!" when cancel string ;check mail table define 1 fields char 30 char 38 char 12 file table load 1 from "outbox.dat" as dynacomm set %table 1 set %num 0 perform last_mess (%table, %num) if (%newmail =1 and %mail = 1) or (%num > 0 and %send = 1) send "Go Mail", wait string "!" ;send mail if %num>0 and %send=1 perform d_update ("Sending mail"), perform send_mail table close 1 table clear 1 ;get mail if %newmail=1 and %mail=1 perform d_update("Retrieving mail"), perform get_mail ;link to pccontact perform d_update("Linking to PCContact"), send "go pccontact" when string "(Y or N)" send "N" wait string "Last" when cancel string ;download any files the user has specified table define 1 fields char 12 int 4 char 10 char 40 int 2 file table load 1 from "download.dat" as dynacomm set %num 0 perform last_file (1,%num) wait quiet "1" if %files =1 or %num > 0 send "LIB" wait quiet "1" if %num>0 perform d_update("Downloading files"), perform download ;get list of new files if %files=1 perform d_update("Updating file list"), perform get_flist, perform lib_files table close 1 table clear 1 ;upload files table define 2 fields char 40 int 4 char 50 char 80 char 255 int 1 file table load 2 from "upload.dat" as dynacomm set %num 0 perform last_file (2,%num) if %upload = 1 and %num > 0 send "lib", perform d_update("Uploading files"), perform sendfiles table close 2 table clear 2 ;get new forum messages if %messages = 1 perform d_update("Getting forum messages"), perform getmess ;send outgoing messages table define 1 fields char 2 char 35 char 24 int 2 char 12 char 6 file table load 1 from "messout.dat" as dynacomm set %num 0 perform last_pubmess ("pub0.dcm",%num) if %num > 0 and %send=1 perform d_update("Sending forum messages"), perform sendmess table close 1 table clear 1 ;log off perform d_update("Logging off"), send "off" wait string "time" hangup ;process forum messages offline perform d_update("Processing forum messages"), perform parse_mess menu menu end *logoff screen hide fkeys hide if connect() hangup dialog cancel return ; ;routine for updating session status dialog box ; *d_update ($stat_mess) if iconic() return dialog update message 1 $stat_mess return ; ;subroutines used to send public forum messages ; *sendmess send "mess" while %num > 0 begin record read 1 at %num if trim(@r1.6) <> "" perform send_rep, goto jumpreply perform wait_send ("!","compose") wait string "/EX" $file=$memdir | @r1.5 file send text $file set directory data $datadir wait delay "1" send "" send "/EXIT" perform wait_send ("!","1") perform wait_send (":",@r1.2) perform wait_send (":",@r1.3) perform wait_send ("!",@r1.4) perform wait_send ("N)","Y") perform wait_send ("!","") *jumpreply set %i %num, perform del_mess decrement %num end send "M" return *del_mess table define 9 fields char 2 char 35 char 24 int 2 char 12 char 6 file table copy %table to 9 record read 9 at %i if @r9="" return else set $file @r9.5 file delete $memdir | $file set directory data $datadir table clear %table table copy 9 to %table exclude @r9 table clear 9 return *send_rep send "reply" perform wait_send ("#",@r1.6) wait string "/EX" $file=$memdir | @r1.5 file send text $file set directory data $datadir wait delay "1" send "" send "/EXIT" perform wait_send ("!","1") perform wait_send ("!","") return return ; ;retrieve public forum messages ; *getmess send "" When string 1 "OPT", send "options", resume when string 2 "!" send "" when string 3 "Browse" send "m" wait resume when cancel string perform wait_send ("!","pause never") perform wait_send ("!","mess") perform wait_send (":","S") wait quiet "1" $sections=" sec:" perform bld_sect if length($sections)=5 file close, return send "read new" | $sections collect $junk file receive text $datadir | "rawmess.dat" when string "Press <CR> !" resume wait resume set directory memo $memdir set directory data $datadir file close return *bld_sect if %sec0=1 $sections=$sections | "0," if %sec1=1 $sections=$sections | "1," if %sec2=1 $sections=$sections | "2," if %sec3=1 $sections=$sections | "3," if %sec4=1 $sections=$sections | "4," if %sec5=1 $sections=$sections | "5," if %sec6=1 $sections=$sections | "6," if %sec7=1 $sections=$sections | "7," if %sec8=1 $sections=$sections | "8" return ; ;process forum messages ; *parse_mess table define 0 fields char 2 char 6 char 35 char 40 char 15 file table load 0 from "newmess.dat" as dynacomm perform last_file (0,0) set $file $datadir | "rawmess.dat" set directory memo $memdir table define 9 text $file record read 9 *look if substr(@r9,1,1)= "#" perform found, perform close_tmp, return record read 9 if eof() table close 9, return goto look *close_tmp table close 8 table close 9 table close 0 table clear 8 table clear 9 table clear 0 file delete $datadir | "rawmess.dat" set directory memo $memdir return *found set %p pos(@r9," ",4) set $messnum substr(@r9,4,%p-4) set $messfile trim($messnum," "," ") | ".DCM" set %p1 pos(@r9,"/",%p) set $section substr(@r9,%p+2,%p1-1) table define 8 text $memdir | $messfile set directory data $datadir set @r8 trim(@r9," ", " ") record write 8 record read 9 set @r8 trim(@r9," ", " ") record write 8 set $date substr(@r9,5,9) record read 9 set @r8 trim(@r9," ", " ") record write 8 set %p pos(@r9,"-") set $subject substr(@r9,%p+1) record read 9 set $from substr(@r9,5) set @r8 trim(@r9," ", " ") record write 8 set @r0.1 " " set @r0.2 $messnum set @r0.3 $subject set @r0.4 $from set @r0.5 $section record write 0 *reader record read 9 if eof return if @r9="" goto reader if substr(@r9,1,12)="Press <CR> !" return if substr(@r9,1,1)="#" table close 8, goto found set @r8 trim(@r9," ", " ") record write 8 goto reader ; ;forum messages dialog box ; *forum ;table define 0 $number $subject $from $section table define 0 fields char 2 char 6 char 35 char 40 char 15 file table load 0 from "newmess.dat" as dynacomm ;table define 1 $to $subject %section $file $repnum table define 1 fields char 2 char 35 char 24 int 2 char 12 char 6 file table load 1 from "messout.dat" as dynacomm table define 5 text "sorts.dat" set %del1 0 set %del2 0 set %i 0 *forum_dialog set %can 0 set %forward 0 set $repnum "" set %focus 1 dialog (,,294,184) "Forum Messages" listbox (5,41,284,56) 0 %i if %focus=2 perform for_switch1 listbox (5,115,284,40) 1 if %focus=1 perform for_switch2 message (5,28,186,10) 'Messages to read:' message (6,102,84,11) 'Messages to send:' button (0,0,42,22) default '&Read' perform readpub, resume button (42,0,42,22) '&New' perform compose_mess, resume button (84,0,42,22) 'Repl&y' if %focus=1 perform reply_mess, resume button (126,0,42,22) '&Print' set %i listbox(%focus), set %table %focus-1, perform printmess, resume button (168,0,42,22) '&Forward' if %focus=1 set %forward 1, set %i listbox(1), record read 0 at %i, set $forfile trim(@r0.2) | ".DCM", perform compose_mess, set %forward 0, resume button (210,0,42,22) '' ;resume ;"Mark" button (252,0,42,22) 'Mark &Del.' set %table %focus-1, set %active %focus, set %i listbox(%focus), perform mark_del button (80,159,145,22) 'Re&turn to Menu' perform close_mess, if %can=1 resume, else return listbox (202,27,64,44) 5 0 COMBOBOX if %focus= 1 set %table 0, perform sort message (167,28,34,10) 'Sort by:' dialog end wait resume goto forum_dialog *close_mess if %del1 > 0 or %del2 > 0 perform ask_del if %can=1 return table close 0 table close 1 table clear 0 table clear 1 table close 5 table clear 5 return ; ;confirm batch delete of marked messages ; *ask_del %tdel=%del1 + %del2 Dialog (,,180,) "Message Delete" icon (,12,,) caution if %tdel > 1 $m1=" messages are ", $m2 = " them now?", else $m1=" message is ", $m2= " it now?" Message (,12,,) str(%tdel) | $m1 | "marked for deletion." Message "Okay to delete" | $m2 Button (30,,,11) default "Yes" resume button (70,,,11) "No" dialog cancel, perform clear_del, return button (110,,,11) cancel "Cancel" set %can 1, return dialog end wait resume perform batch_del dialog cancel return ; ;activate new listbox ; *for_switch1 dialog update listbox(2) table 1, set %focus 1 dialog update button 3 "Repl&y" dialog update button 5 "&Forward" return *for_switch2 dialog update listbox(1) table 0, set %focus 2 dialog update button 3 "" dialog update button 5 "" return ; ;message handling routines ; *printmess record read %table at %i if %table=0 set $file trim(@r0.2) | ".DCM", else set $file @r1.5 print file $memdir | $file set directory data $datadir return *readpub set %i listbox(%focus) record read %focus-1 at %i if %focus=1 set $file trim(@r0.2) | ".DCM", set memotitle trim(@r0.4) | "-" | trim(@r0.3) | "-" | $file, else if @r1 = "" resume, else set $file @r1. 5, set memotitle trim(@r1.2) | "-" | trim(@r1.3) | "-" | $file dialog cancel perform editor ($file) return *reply_mess set %i listbox(1) record read 0 at %i set $subject @r0.3 set $to @r0.4 set $section @r0.5 set %pos pos($section,"/") set $section substr($section,1,%pos-1) set %section num($section) set $repnum @r0.2 dialog cancel perform compose_mess set $repnum "" return *sort set %sort listbox(3) if %sort=0 return increment %sort table sort %table %sort dialog update listbox %focus table %table 0 dialog update listbox 3 table 5 0 return *compose_mess set %num 0 $file="pub000.dcm" perform last_pubmess ($file, %num) increment %num $file="pub" | str(%num) | ".dcm" if %forward = 1 set $old_file $forfile, else set $old_file "new.dcm" file copy $memdir | $old_file $memdir | $file set directory data $datadir if $repnum<> "" goto skip1 set $to "Enter addressee here" set $subject "Enter subject here" set %section 0 *skip1 set %cancel 0 perform address_mess ($to, $subject, %section) if %cancel=1 set %cancel 0, return set memotitle $to | "-" | $subject | "-" | $file dialog cancel perform editor ($file) return ; ;find last forum message ; *last_pubmess ($file, %num) record read 1 at 0 while not eof begin record read 1 end $file=@r1.5 $file=trim($file,"pub",".DCM") %num=num($file) return *address_mess ($to, $subject, %section) table define 9 text "section.dat" dialog (,,216,103) 'Post Message' message (13,9,27,10) 'Section:' listbox (44,7,99,62) 9 %section COMBOBOX message (10,32,30,10) 'Post for:' edittext (44,31,115,12) 115 '' trim($to) button (166,30,40,14) 'Sysop' dialog update edittext(1) "76000,21" message (12,53,29,10) 'Subject:' edittext (44,52,115,12) 115 '' $subject limit 24 button (42,79,40,14) default 'Okay' resume button (132,78,40,14) cancel 'Cancel' dialog cancel, set %cancel 1, return dialog end wait resume set $to edittext (1), set @r1.2 $to set $subject edittext (2), set @r1.3 $subject set @r1.4 str(listbox(1)) set @r1.5 $file set @r1.6 $repnum record write 1 dialog cancel return ; ;message deletion routines ; ;*del_mess ;goto mark_del ;return *clear_del set %loopnum 0 perform cd2 set %loopnum 1 perform cd2 return *cd2 if %loopnum=0 and %del1 < 1 return if %loopnum=1 and %del2 <1 return set %i 0 record read %loopnum at %i while not eof begin record read %loopnum at %i if %loopnum=0 and @r0.1="D " set @r0.1 " ", record write 0 at %i if %loopnum=1 and @r1.1="D " set @r1.1 " ", record write 1 at %i increment %i end return *batch_del %loopnum=0 perform bd1 %loopnum=1 perform bd1 return *bd1 if %loopnum=0 and %del1=0 return if %loopnum=1 and %del2=0 return set %i 0 record read %loopnum at %i while not eof begin record read %loopnum increment %i if @r(%loopnum).1="D " perform del_one end perform bd2 dialog cancel return *bd2 set $exclude "D " table define 9 fields char 2 char 6 char 35 char 40 char 15 file table copy %loopnum to 9 table clear %loopnum table copy 9 to %loopnum EXCLUDE $exclude table clear 9 return *del_one if %loopnum=0 set $file trim(@r0.2) | ".DCM" , else set $file trim(@r1.5) ; dialog "Batch Delete" ; message "loopnum " | str(%loopnum) ; message "file " | $file ; message "memdir" | $memdir ; message "Deleting " | $memdir | $file | "." ; button "Ok" resume ; button "cancel" dialog cancel, cancel ; dialog end ; wait resume ;dialog cancel file delete $memdir | $file set directory data $datadir return *mark_del record read %table at %i switch str(%table) case str(0) if @r0.1="D " set @r0.1 " ", decrement %del1, else set @r0.1 "D ", increment %del1 leave case str(1) if @r1.1="D " set @r1.1 " ", decrement %del2, else set @r1.1 "D ", increment %del2 leave switch end record write %table at %i increment %i dialog update listbox(%active) table %table %i return ; ;routines for uploading files to pccontact ; *sendfiles perform wait_send ("!","0") while %num > 0 begin record read 2 at %num perform wait_send ("!","UPLOAD /prot:xmodem") set $fname @r2.1, perform trim_name perform wait_send ("name:",$fname) when string 1 "You must" goto backdoor when string 2 "choice" resume when string 3 "Replace" send "n", goto backdoor wait resume send @r2.6 wait string "plete" set binarytransfers xmodem file send binary @r2.1 set directory data $datadir send "" when string 1 "<CR>" send "" when string 2 "!" resume when string 3 "/EXIT" resume when string 4 "Resuming" when cancel string, goto backdoor wait resume when cancel string $tmp=@r2.5 while length($tmp)>50 begin $tmp1=substr($tmp,1,50) $tmp=substr($tmp,51,) %pos=pos($tmp," ") $tmp1=$tmp1 | substr($tmp,1,%pos) $tmp=substr($tmp,%pos) send trim($tmp1," "," ") wait delay "1" end send $tmp send "/EXIT" perform wait_send (":",@r2.4) perform wait_send ("ished",@r2.3) perform wait_send ("okay","Y") perform wait_send ("CR","") set %table 2 set %i %num perform del_lib *backdoor decrement %num end return *trim_name %p1=pos($fname,"\") if %p1=0 return increment %p1 $fname=substr($fname,%p1,40-%p1) goto trim_name ; ;routine for downloading files from pccontact ; *download while %num > 0 begin ;table define 1 fields name size date desc lib record read 1 at %num set $fname trim(@r1.1) set $lib @r1.5 send $lib perform wait_send ("!","DOWN "| $fname | " /prot:xmodem") wait string "<CR>" set binarytransfers xmodem file receive binary $downdir | $fname set directory data $datadir send "" when string 1 "<CR>" send "" when string 2 "choice" send "lib", resume wait resume when cancel string set %table 1 set %i %num perform del_lib decrement %num end return ; ;routines for retrieving new file lists ; *get_flist ;get number of days since last file listing was retrieved set %secs1 seconds(,date()) if %oldlist=0 %oldlist=-1544336896 set %secs2 %oldlist + 86400 %days=(%secs1-%secs2)/(3600*24) if %days < 0 %days=1 $days = str(%days) ;now we start the scan set %lib 0 while %lib < 5 begin when quiet "2" send "", resume when string "!" resume wait resume when cancel if %lib=0 %check=%lib0, else if %lib=1 %check=%lib1, else if %lib=2 %check=%lib2, else if %lib=3 %check=%lib3, else if %lib=4 %check=%lib4 if %check=0 send "", goto skiplib send "lib "|str(%lib) wait quiet "2" CLEAR send "scan days:" | $days |" /short" collect $junk collect $junk if substr($junk,1,2) <> "No" perform get_em, send "" ;perform wait_send ("!","m") *skiplib increment %lib end table close 0 table clear 0 return *get_em wait quiet "1" selection buffer selection save $datadir | "Lib" | str(%lib) |".DAT" set directory memo $memdir return *lib_files set %lib 0 table define 0 fields char 12 int 4 char 10 char 40 int 2 file table load 0 from "library.dat" as dynacomm set %count 0 perform last_file (0,%count) while %lib < 5 begin table define 9 text "Lib" | str(%lib) |".DAT" record read 9 at 0 set $junk @r9 record read 9 set $junk @r9 record read 9 set $junk @r9 perform files_loop table close 9 table clear 9 file delete "Lib" | str(%lib) |".DAT" increment %lib end set %oldlist seconds(,date()) perform saveall return *files_loop record read 9 if eof return set $junk @r9 if substr($junk,1,1)=" " or $junk="" or substr($junk,1,4)="scan" or substr($junk,1,4)="Pres" goto files_loop parse $junk $fname "/" $junk parse $junk $junk1 " " $junk parse $junk $size "K" $junk set $date " " | substr($junk, 2,9) set $des substr($junk,11,40) set @r0.1 $fname set @r0.5 str(%lib) set @r0.2 $size set @r0.3 $date set @r0.4 $des ;set @r0.6 str(seconds(,date())) record write 0 goto files_loop ; ;routine for sending email ; *send_mail while %num > 0 begin record read 1 at %num set $to @r1.1 set $subject @r1.2 set $file @r1.3 send "compose" wait string "done)" file send text $file set directory data $datadir when quiet "1" send "", send "/EXIT" when string "!" send "1", resume wait resume when cancel wait delay "1" send $to when string "Invalid" send "", send "", decrement %num, when cancel string, goto endloop perform wait_send (":", $subject) perform wait_send ("!", "y") perform wait_send ("!", "") set %i %num, set %table 1 perform del_let decrement %num *endloop end return ; ;routines for retrieving email ; *name_new_mail increment %count set $file "LET" | str(%count) | ".DCM" if exists($memdir|$file) goto name_new_mail set directory data $datadir return *get_mail table define 0 fields char 1 char 1 char 25 char 12 char 9 char 25 char 12 file table load 0 from "mail.dat" as dynacomm set %count 0 perform last_mess (0,%count) set $file "" perform name_new_mail send "set page no" perform wait_send ("!", "Read") when string 1 "ALL" perform wait_send ("!", "0"), resume when string 2 "e:" resume wait resume when cancel string file receive text $file perform get_let *next_letter perform name_new_mail file receive text $file set %cancel 0 perform get_let if %cancel=1 return goto next_letter *get_let set %binmess 0 when string 1 "No mail" perform end_lets, return when string 2 "CompuServe Mail Main Menu" perform end_lets, return when string 3 "is Binary" set %binmess 1 when quiet "2" send "" wait string "m:" collect $from collect $subject wait string "<CR>" when cancel file close set @r0.1 " " ; set to "*" to denote unread set @r0.2 " " ; set to ">" to denote incoming set $sname $from set %p pos($sname,"[") set $sname substr($sname,1,%p-1) set $sname substr($sname,1,25) set @r0.3 trim($sname," "," ") set $num $from set %p1 pos($num,"]") increment %p set @r0.4 substr($num,%p,%p1-%p) set $date date() set @r0.5 $date %cpos=pos($subject,":") $subject=substr($subject,%cpos+2,25) *ch if substr($subject,1,1)=" " $subject = substr($subject,2), goto ch set @r0.6 $subject set @r0.7 $file record write 0 if %binmess=0 send "Del", else send "" return *end_lets file close file delete $memdir | $file set directory data $datadir table close 0 table clear 0 set %cancel 1 return ; ;standard wait prompt/send response routine ; *wait_send ($prompt,$response) wait string $prompt send $response return ; ;dialog for composing autoserve script ; *script dialog (,,190,123) 'AutoServe Script' checkbox (17,15,81,11) %mail 'Collect new &mail.' checkbox (17,32,105,11) %messages 'Collect new &forum messages.' checkbox (17,49,107,11) %send "&Send mail and messages." checkbox (17,66,107,11) %files '&Collect a list of new files.' checkbox (17,83,180,11) %upload "Se&nd files to PCContact files library." button (30,104,40,14) default '&Okay' resume button (80,104,40,14) cancel 'Cance&l' dialog cancel, return button (130,104,40,14) "O&ptions" perform script_opt, goto script dialog end wait resume %mail=checkbox(1) %messages=checkbox(2) %files=checkbox(4) %send=checkbox(3) %upload=checkbox(5) perform saveall perform autoserve return *script_opt dialog (,,182,180) 'Script Options' message (19,2,149,10) 'Select sections and libraries to check.' groupbox (5,11,171,79) 'Forum Sections' checkbox (14,22,76,12) %sec0 'General Information' checkbox (14,35,75,12) %sec1 'Letters/Comments' checkbox (14,48,75,12) %sec2 'Columns/Opinion' checkbox (14,61,50,12) %sec3 'NEW!' checkbox (14,74,70,12) %sec4 'Prime Time' checkbox (96,22,50,12) %sec5 'Features' checkbox (96,35,50,12) %sec6 'HELP' checkbox (96,48,77,12) %sec7 "Consumer's Edge" checkbox (96,61,64,12) %sec8 "Off the Record" groupbox (5,94,171,55) 'File Libraries' checkbox (14,106,80,12) %lib0 'General / Forum Info.' checkbox (14,119,76,12) %lib1 'Hot Tips/Secrets' checkbox (14,132,75,12) %lib2 'Templates/Macros' checkbox (96,106,77,12) %lib3 'Utilities/Misc.' checkbox (96,119,78,12) %lib4 'Files by Month' button (40,156,40,14) default '&Okay' resume button (101,156,40,14) cancel 'Cance&l' dialog cancel, return dialog end wait resume set %sec0 checkbox(1) set %sec1 checkbox(2) set %sec2 checkbox(3) set %sec3 checkbox(4) set %sec4 checkbox(5) set %sec5 checkbox(6) set %sec6 checkbox(7) set %sec7 checkbox(8) set %sec8 checkbox(9) set %lib0 checkbox(10) set %lib1 checkbox(11) set %lib2 checkbox(12) set %lib3 checkbox(13) set %lib4 checkbox(14) dialog cancel return ; ;email dialog box ; *mail ;define desk with read to/from name number date sub filename table define 0 fields char 1 char 1 char 25 char 12 char 9 char 25 char 12 file table load 0 from "mail.dat" as dynacomm ;define outbox with name or number subject filename table define 1 fields char 30 char 38 char 12 file table load 1 from "outbox.dat" as dynacomm set %i 0 *mail_dialog set %forward 0 set $repnum "" set %focus 1 dialog (,,294,184) "Personal Mail" listbox (5,41,284,56) 0 %i if %focus=2 perform switch1 listbox (5,115,284,40) 1 if %focus=1 perform switch2 message (5,28,186,10) 'Mail to read:' message (6,102,84,11) 'Mail to send:' button (0,0,42,22) default '&Read' set %i listbox(%focus), set %table %focus-1, perform read, resume button (42,0,42,22) '&New' perform compose, resume button (84,0,42,22) 'Repl&y' if %focus=1 perform reply, resume button (126,0,42,22) '&Print' set %i listbox(%focus), set %table %focus-1, perform printmail, resume button (168,0,42,22) '&Forward' if %focus=1 perform forward, resume button (210,0,42,22) "" ;resume '&Attach button (252,0,42,22) '&Erase' set %i listbox(%focus), set %table %focus-1, perform del_let, set %active %table, perform up_list ;iconbutton (8,158,,) "_Note" "&Mark (6)" ;iconbutton (240,158,,) "_caution" "&Clear Marks" button (80,159,145,22) 'Re&turn to Menu' table close 0, table close 1, table clear 0, table clear 1, return ;listbox (202,27,64,24) 0 COMBOBOX ;message (167,28,34,10) 'Sort by:' dialog end wait resume goto mail_dialog *switch1 dialog update listbox(2) table 1 dialog update button 6 "" dialog update button 3 "Repl&y" dialog update button 5 "&Forward" set %focus 1 return *switch2 dialog update listbox(1) table 0 dialog update button 6 "" ; "&Attach" dialog update button 3 "" dialog update button 5 "" set %focus 2 return ; ;mail handling routines ; *printmail record read %table at %i if %table=0 set $file @r0.7, else set $file @r1.3 print file $memdir| $file set directory data $datadir return *forward set %i listbox(1) record read 0 at %i set $old_file @r0.7 set $subject @r0.5 set $add_title "Forward Message" goto ready_add *compose set $old_file "new.dcm" set $subject "Subject of message" set $add_title "Compose Mail" *ready_add set $to "" set %cancel 0 perform address ($to, $subject, $add_title, %cancel) if %cancel=1 return perform create_mess ($to, $subject, $old_file) return *address ($to, $subject, $add_title, %cancel) dialog (116,73,146,83) $add_title edittext (19,12,101,12) 101 '' "Addressee's name or ID #." edittext (18,33,103,12) 103 '' $subject button (11,54,40,14) default 'Okay' resume button (92,55,40,14) cancel 'Cancel' dialog cancel, set %cancel 1, return dialog end wait resume set $To edittext(1) set $subject edittext(2) dialog cancel return *del_let if %table=0 table define 9 fields char 1 char 1 char 25 char 12 char 9 char 25 char 12 file, else table define 9 fields char 30 char 38 char 12 file table copy %table to 9 record read 9 at %i if %table=0 set $file @r9.7, else set $file @r9.3 file delete $memdir | $file set directory data $datadir table clear %table table copy 9 to %table exclude @r9 table clear 9 return *up_list if %active=0 dialog update listbox 1 table 0 %i, dialog update listbox 2 table 1 else dialog update listbox 1 table 0, dialog update listbox 2 table 1 %i return *up_flist if %active=0 dialog update listbox 1 table 0 %i, dialog update listbox 2 table 1, dialog update listbox 3 table 2 else if %active=1 dialog update listbox 1 table 0, dialog update listbox 2 table 1 %i, dialog update listbox 3 table 2 else dialog update listbox 1 table 0, dialog update listbox 2 table 1, dialog update listbox 3 table 2 %i return *read record read %table at %i if %table=0 set $file @r0.7, else set $file @r1.3 dialog cancel set memotitle $file perform editor ($file) return *editor ($file) menu cancel menu popup "&File" System 1 popup "&Edit" System 2 popup "&Search" System 3 menu end wait edit $memdir | $file set directory data $datadir menu menu end return *create_mess ($to,$subject,$old_file) set %count 0 perform last_mess (1,%count) set $file "OUT" | str(%count+1) | ".DCM" file copy $memdir | $old_file $memdir | $file set directory data $datadir set @r1.1 $to set @r1.2 $subject set @r1.3 $file record write 1 set memotitle $to | "-" | $subject | "-" | $file dialog cancel perform editor ($file) return *reply record read 0 at listbox(1) if @r0.7="" return set %count 0 perform last_mess (1,%count) set @r1.1 @r0.4 set @r1.2 @r0.6 set $file "OUT" | str(%count+1) | ".DCM" set @r1.3 $file record write 1 ;dialog ;message $memdir | "new.dcm" ;button "okay" resume ;dialog end ;wait resume file copy $memdir | "new.dcm" $memdir | $file set directory data $datadir set memotitle trim(@r1.1) | "-" | trim(@r1.2) | "-" | $file dialog cancel perform editor ($file) return *last_mess (%table, %num) record read %table at 0 while not eof begin record read %table end if %table=0 $file=@r0.7, $file=trim($file,"LET",".DCM"), else $file=@r1.3, $file=trim($file,"OUT",".DCM") %num=num($file) return *last_file (%table, %num) record read %table at 0 while not eof begin record read %table increment %num end return ; ;file library dialog ; *library ;table define 0 fields name size date desc lib table define 0 fields char 12 int 4 char 10 char 40 int 2 file table load 0 from "library.dat" as dynacomm table define 1 fields char 12 int 4 char 10 char 40 int 2 file table load 1 from "download.dat" as dynacomm ;table define 2 fields name size title key des type table define 2 fields char 40 int 4 char 50 char 80 char 255 int 1 file table load 2 from "upload.dat" as dynacomm set %i 0 set %focus 1 dialog (,,294,188) 'PC Contact Library' button (0,0,98,16) default '&Download File' if %focus=1 set %i listbox(1), perform move_down, set %active 0, perform up_flist button (98,0,98,16) '&Upload a File' set %focus 3, set %table 2, perform up_load, set %active 2, resume button (196,0,98,16) '&Cut' set %i listbox(%focus), set %table %focus-1, perform del_lib, set %active %table, perform up_flist Message (4,20,,) 'Files Available' listbox (4,32,286,60) 0 %i if %focus <> 1 perform foc1 Message (4,88,,) 'Download list' listbox (4,100,286,24) 1 if %focus <> 2 perform foc2 Message (4,128,,) 'Upload list' listbox (4,140,286,24) 2 if %focus <> 3 perform foc3 button (80,167,145,16) 'Re&turn to Menu' dialog cancel, table close 0, table close 1, table clear 0, table clear 1, return dialog end wait resume dialog cancel table close 0 table close 1 table close 2 table close 9 goto library *foc1 dialog update button(1) "&Download File" if %focus=2 dialog update listbox(2) table 1, set %focus 1, else dialog update listbox(3) table 2, set %focus 1 return *foc2 dialog update button(1) "" if %focus=1 dialog update listbox(1) table 0, set %focus 2, else dialog update listbox(3) table 2, set %focus 2 return *foc3 dialog update button(1) "" if %focus=2 dialog update listbox(2) table 1, set %focus 3, else dialog update listbox(1) table 0, set %focus 3 return ; ;file upload dialog box ; *up_load dialog cancel File openname $upfile TYPE "*.*" Default "Select file to upload!" if error() return if $upfile = "Select file to upload!" return set directory data $datadir $title='Enter a title for this file' $des='Enter description of file' $key='Enter keywords separated by spaces' *upload_dlg dialog (,,244,159) "Upload: " | $upfile table define 9 text "types.dat" message (4,8,,) 'Select transfer type:' listbox (74,6,,58) 9 1 combobox message (4,36,19,10) 'Title:' edittext (24,33,208,12) '' $title LIMIT 50 edittext (10,58,210, 44) '' $des edittext (39,115,190,12) '' $key message (3,116,34,10) "Keywords:" button (46,138,40,14) default 'Okay' resume button (175,137,40,14) cancel 'Cancel' dialog cancel, return dialog end wait resume set $title edittext(1) if $title='Enter a title for this file' goto upload_dlg set $des edittext(2) if $des= 'Enter description of file' set $des "" set $key edittext(3) if $key = 'Enter keywords separated by spaces' set $key "" set %type listbox(1) + 1 set %table 2 set %count 0 perform last_file (%table,%count) set @r2.1 $upfile set %size filesize($upfile) set %size int(%size/1024) if %size=0 %size=1 set @r2.2 str(%size) set @r2.3 " " | $title set @r2.4 $key set @r2.5 $des set @r2.6 str(%type) record write 2 dialog cancel return ; ;file list handling routines ; *move_down perform last_file (1,0) record read 0 at %i set @r1 @r0 record write 1 return *del_lib if %table=2 table define 9 fields char 40 int 4 char 50 char 80 char 255 int 1 file, else table define 9 fields char 12 int 4 char 10 char 40 int 2 file table copy %table to 9 record read 9 at %i if @r9="" return set $file @r9.1 table clear %table table copy 9 to %table exclude @r9 table clear 9 return ; ;account setup dialog ; *setup if $name="" $name='Enter Compuserve account number here' if $phone="" $phone='Enter Compuserve phone number here' if $pass<>"" perform decode, else $pass='Enter Compuserve password here' if pos($downdir,":")=0 $downdir="Enter download directory here." dialog (,,200,120) "Setup" message (2,10,55,10) 'Account:' edittext (48,7,144,12) 144 '' $name message (2,27,37,10) 'Password:' edittext (48,24,143,12) 143 '' $pass ;password message (2,44,57,10) 'Access #:' edittext (47,41,144,12) 144 '' $phone message (2,61,54,10) 'Download to:' edittext (47,58,144,12) 144 '' $downdir button (48,78,64,11) "&Communications" perform dyna_set, settings communications, settings modem, save, goto setup button (120,78,64,11) "&File Transfers" perform dyna_set, settings texttransfers, settings binarytransfers, save, goto setup button (10,100,40,14) default '&Okay' resume button (150,100,40,14) cancel 'Cance&l' dialog cancel, perform encode, return dialog end wait resume $name=edittext(1) $pass=edittext(2) perform encode $phone=edittext(3) $downdir=trim(edittext(4)) %l=length($downdir) if substr($downdir,%l,1)<>"\" set $downdir $downdir | "\" perform saveall return *dyna_set $name=edittext(1) $pass=edittext(2) perform encode $phone=edittext(3) $downdir=edittext(4) dialog cancel return ; ;routine to create account settings file ; *saveall file delete "account.inf" table define 11 TEXT "account.inf" set @r11 $name record write 11 set @r11 $pass record write 11 set @r11 $phone record write 11 set @r11 str(%mail) record write 11 set @r11 str(%files) record write 11 set @r11 str(%messages) record write 11 set @r11 str(%send) record write 11 set @r11 str(%upload) record write 11 set @r11 $downdir record write 11 set @r11 str(%sec0) record write 11 set @r11 str(%sec1) record write 11 set @r11 str(%sec2) record write 11 set @r11 str(%sec3) record write 11 set @r11 str(%sec4) record write 11 set @r11 str(%sec5) record write 11 set @r11 str(%sec6) record write 11 set @r11 str(%sec7) record write 11 set @r11 str(%sec8) record write 11 set @r11 str(%lib0) record write 11 set @r11 str(%lib1) record write 11 set @r11 str(%lib2) record write 11 set @r11 str(%lib3) record write 11 set @r11 str(%lib4) record write 11 set @r11 str(%oldlist) record write 11 table close 11 table clear 11 return ; ;password encode/decode routines ; *decode return ;set %pl num(substr($pass,1,2)) ;set $pass substr($pass,3,%pl) ;set $pass decrypt($pass,"PASS") ;return *encode return ;set $pass encrypt($pass,"PASS") ;set $pl str(length($pass)) ;set $pass $pl | $pass ;return *about dialog (,,156,170) 'PCContact/Windows 0.96' message (12,8,132,72) " PCContact/Windows was written by Paul Bonner as part of PC/Computing's on-going Windows Project series. The entire project was produced using Future Soft Engineering's Dynacomm." message (12,53,132,72)" The PCContact/Windows script is intended for demonstration purposes only. No warranty is made concerning its fitness for any other purpose." message(12,100,132,72)" For more information about Dynacomm, visit the Future Soft Engineering section of the WINAPA forum by typing 'GO CIS:WINAPA' at any Compuserve prompt." button (60,150,,) "Okay" resume dialog end wait resume dialog cancel return